iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

探索 Spring Boot Doc系列 第 28

Doc 7.1.4 Customizing SpringApplication

  • 分享至 

  • xImage
  •  

If the SpringApplication defaults are not to your taste, you can instead create a local instance and customize it. For example, to turn off the banner, you could write:

如果使用者對SpringApplication 的預設不滿意的話,可以自己創建一個實體並為其客製屬性。
譬如說下方的程式碼就把Banner 關掉。

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(MyApplication.class);
        application.setBannerMode(Banner.Mode.OFF);
        application.run(args);
    }

}
Doc 18.2.2. Externalize the Configuration of SpringApplication

SpringApplication has bean property setters, so you can use its Java API as you create the application to modify its behavior. Alternatively, you can externalize the configuration by setting properties in spring.main.*. For example, in application.properties, you might have the following settings:

SpringApplication 有 bean 屬性設置方法,可以透過 Java API 在創建 application 的時候去修改他的行爲。除了透過 SpringApplication setter 方法之外,你可以透過外掛註冊(externalize the configuration) 以 spring.main.* 開頭的屬性來取代一系列的 setter 方法。

下方為一個透過客製化外部註冊的application.yml

spring:
  main:
    web-application-type: "none"
    banner-mode: "off"

上述分別對應 SpringApplicationsetWebApplicationTypesetBannerMode

這裡特別注意到 web-application-type (歸類在spring.main.*),這個屬性有對應的enum 類別,
有三個列舉常數(enum constant)

enum constant description
NONE The application should not run as a web application and should not start an embedded web server.
REACTIVE The application should run as a reactive web application and should start an embedded reactive web server.
SERVLET The application should run as a servlet-based web application and should start an embedded servlet web server.

上表對應的三種,NONE 代表不作為 web 應用,自然也不會啟動內崁的web server ;

REACTIVE 就是啟動的是響應式應用,以及對應的內崁的響應式web server,最後一種

SERVLET 就是一般的 web 應用 以及對應的內崁 web server( 譬如說 Tomcat )。

那在一般我們沒有客製化 SpringApplication 的情況下,預設是採用哪一種 web-application-type ?
這得參照官方文檔的 .A.1. Core Properties (參照下方參考) 中 關於 spring.main.web-application-type 的描述,

Flag to explicitly request a specific type of web application. If not set, auto-detected based on the classpath.

意思是這個註冊屬性值,指定web 應用的類型,若沒有特別設定的話,會自動根據 類別路徑(classpath)去偵測,這裡的意思是…. 如果去使用者有特別注入特定的web server 的話,就會將應用識別成對應的類型,譬如說有內崁入的tomcat server 就會識別為 web-application-type 就會識別為 SERVLET。

參考資料
{官方} Externalize the Configuration of SpringApplication
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto

{官方} SpringApplication JavaDoc
https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/SpringApplication.html

{官方} Enum Class WebApplicationType
https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/WebApplicationType.html

{官方} .A.1. Core Properties
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#appendix.application-properties.core


上一篇
Annotation Lazy
下一篇
Doc 7.1.5. Fluent Builder API
系列文
探索 Spring Boot Doc30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言